Bit arthimetric(boolean)

Boolean
AND, OR, XOR, NOT, ...
    AND
mov ax, 0C123H
and ax, 82F6H ;ax=8022H
    OR
mov ax,0C123H
or ax,0E831H ;ax=E933H
    XOR
mov ax,0C123H
xor ax,0E831H ;ax=2912H
    NOT
not연산의 단한(unary) 연산이다. not 연산은 1의 보수를 찾아준다.
다른 비트 연산(Bitwise operation)들과는 달리 NOT 연산은
FLAGS 레지스터의 어떠한 값도 바꾸지 않는다.
mov ax,0C123H
not ax ;ax=3EDCH
    TEST
TEST 명령어는 AND 연산을 수행하지만 결과는 보관하지 않는다.
단지 FLAGS 레지스터의 값 만 바꾼다.
ex) TEST 연산결과가 0이라면 ZF가 세트 된다.
Use of Bit arthimetric
    -i번째 비트를 켠다
2^i 와 OR 연산을 한다.(이는 i번째 비트만 켜진(1인) 이진수 이다.)
    -i번째 비트를 끈다
오직 i 번째 비트만 꺼진(0인) 이진수와 AND 연산을 한다.
이러한 피연산자를 마스크(mask)라고 한다.
    -i번째 비트에 보수 취하기
2^i 와 XOR 연산을 한다.
    AND & OR & XOR
mov ax,0C123H
or ax,8 ;3 , ax=C12BH
and ax,0FFDFH ;5 , ax=C10BH
xor ax,8000H ;1 , ax=410BH
or ax,0F00H ; , ax=4F0BH
and ax,0FFF0H ; , ax=4F00H
xor ax,0F00FH ; , ax=BF0FH
xor ax,0FFFFH ;1 , ax=40F0H
nibble은 1바이트의 절반으로 보통 4비트를 가르킴
    AND to find Remainder
100/16의 나머지를 구하는 코드
2^i-1 인 마스크와 AND 연산을 하면 된다.
(나누는 수 16 미만의 비트의 크기가 나머지임을 이용)
mov eax,100 ;100=64H
mov ebx,0000000FH ;mask=16-1=15 or F
and ebx,eax ;ebx=remainder=4
    use CL register to modify data
EAX의 임의의 비트를 세트하는 코드.
BH에 세트가 될 비트의 위치가 저장되어 있다.
mov cl,bh
mov ebx,1
shl ebx,cl
or eax,ebx
EAX의 임의의 비트를 오프하는 코드
mov cl,bh
mov ebx,1
shl ebx,cl
not ebx
and eax,ebx
    self XOR
xor eax,eax ;eax=0
자신을 XOR 연산하게 되면 항상 0이 된다.
MOV보다 XOR이 기계어 코드 크기가 작기 때문에 자주 사용된다.